package com.ucar.training.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * @author XiongMM
 * @date 2019/7/26 15:37
 * @description
 *
 * sessionCreated()方法就是在创建一个session时的监听，具体时间点是在session创建完成之后，所以可以在方法中对刚创建的session进行操作。

在这个例子中，代码维护了一个当前WebService中的session数，当session创建时加一，session销毁时减一，这个session数是放在上下文中的。同时还往当前session中添加了一个叫testName的参数。

这个例子中的session数和testName参数，可以在应用层中的以下代码获得：

String sessionCount=request.getSession().getServletContext().getAttribute("sessionCount").toString();

String testName=request.getSession().getAttribute("testName").toString();

 */
public class MyHttpSessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("MyHttpSessionListener Created,sessionId:"+httpSessionEvent.getSession().getId());

        Integer count=null;//session数量
        Object sessionCount=httpSessionEvent.getSession().getServletContext().getAttribute("sessionCount");
        if(sessionCount==null){
            count=0;
        }else{
            count=Integer.valueOf(sessionCount.toString());
        }
        count++;
        System.out.println("当前session数："+count.toString());
        httpSessionEvent.getSession().getServletContext().setAttribute("sessionCount", count);
        httpSessionEvent.getSession().setAttribute("testName", "this is a name");

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("MyHttpSessionListener Destory,sessionId:"+httpSessionEvent.getSession().getId());

        Integer count=null;//session数量
        Object sessionCount=httpSessionEvent.getSession().getServletContext().getAttribute("sessionCount");
        if(sessionCount==null){
            count=0;
        }else{
            count=Integer.valueOf(sessionCount.toString());
        }
        count--;
        System.out.println("当前session数："+count.toString());
        httpSessionEvent.getSession().getServletContext().setAttribute("sessionCount", count);
    }
}
